home *** CD-ROM | disk | FTP | other *** search
/ Experimental BBS Explossion 3 / Experimental BBS Explossion III.iso / c / cujoct93.zip / 1110061A < prev    next >
Text File  |  1993-07-14  |  2KB  |  83 lines

  1. // Partial listing of SPString
  2. // header
  3. class SPString
  4. {
  5. private:
  6.   // variable length string mechanism
  7.   VarString pstr;
  8.     
  9. public:
  10.   // forward declare
  11.   class substring;
  12.     
  13.   // ....
  14.   SPString(const substring& sb) : pstr(sb.pt, sb.len){}
  15.   SPString& operator=(const substring& sb);
  16.  
  17.   operator const char*() const{return pstr;}
  18.   const char operator[](int n) const{ return pstr[n]; }
  19.  
  20.   int length(void) const{ return pstr.length(); }
  21.  
  22.   substring substr(int offset, int len= -1);
  23.   substring substr(const Range& r){ return substr(r.start(), r.length());}
  24.         
  25.   SPStringList split(const char *pat= "[ \t\n]+", int limit= -1);
  26.     
  27.   int operator<(const SPString& s) const
  28.   { return (strcmp(pstr, s) < 0); }
  29.   // ditto for > <= >= == !=
  30.  
  31.   int operator>(const char *s) const
  32.   { return (strcmp(pstr, s) > 0); }
  33.   // ditto for < <= >= == !=
  34.  
  35.   friend int operator==(const char *s, const SPString& sp)
  36.   { return (strcmp(s, sp.pstr) == 0); }
  37.   // ditto for > <= >= < !=
  38.  
  39.   friend substring;
  40.  
  41. private:
  42.   void insert(int pos, int len, const char *pt, int nlen);
  43.  
  44.   class substring
  45.   {
  46.   public:
  47.     int pos, len;
  48.     SPString& str;
  49.     char *pt;
  50.  
  51.     substring(SPString& os, int p, int l) : str(os)
  52.     {
  53.       if(p > os.length()) p= os.length();
  54.       if((p+l) > os.length()) l= os.length() - p;
  55.       pos= p; len= l;
  56.       if(p == os.length()) pt= 0; // append to end of string
  57.       else pt= &os.pstr[p];
  58.     }
  59.  
  60.     void operator=(const SPString& s)
  61.     {
  62.        if(&str == &s){ // potentially overlapping
  63.          VarString tmp(s);
  64.          str.insert(pos, len, tmp, strlen(tmp));
  65.         }else str.insert(pos, len, s, s.length());
  66.     }
  67.         
  68.     void operator=(const substring& s)
  69.     {
  70.       if(&str == &s.str){ // potentially overlapping
  71.         VarString tmp(s.pt, s.len);
  72.         str.insert(pos, len, tmp, strlen(tmp));
  73.       }else str.insert(pos, len, s.pt, s.len);
  74.     }
  75.  
  76.     void operator=(const char *s)
  77.     {
  78.       str.insert(pos, len, s, strlen(s));
  79.     }
  80.   };
  81. };
  82.  
  83.